指定したある一定の期間の間にステータスチェックが失敗しているインスタンスの一覧取得
はじめに
多数のEC2インスタンスを稼働させている場合、インスタンスのステータスチェックが失敗しているインスタンスを一覧で取得したいというケースが少ないながらもあるかもしれません。
今回はその一覧を取得するスクリプトをご紹介します。
スクリプト内容と実行結果
スクリプトは弊社エンジニアの佐瀬 幹哉さんが作成してくださいました!
動作のポイントは以下になります。
- aws ec2 describe-instances でインスタンス ID の一覧を取得する
- 取得したすべてのインスタンスIDをそれぞれ dimensions に指定して aws cloudwatch get-metric-statistics を実行する
- aws cloudwatch get-metric-statistics で取得したデータポイントにて、Statusが"0.0"ではないデータポイントがあれば指定期間内でステータスチェックに失敗しているため、インスタンスIDを出力する
#!/bin/bash ME=$(basename $0) if [ -z "$2" ]; then echo "Usage: $ME start-time end-time" exit 1 fi START_TIME=$1 END_TIME=$2 INSTANCE_IDS=$(aws ec2 describe-instances --query Reservations[].Instances[].[InstanceId] --output text) for instance_id in $INSTANCE_IDS; do # 配列化 STATUS=($(aws cloudwatch get-metric-statistics \ --namespace AWS/EC2 \ --metric-name StatusCheckFailed \ --start-time ${START_TIME} \ --end-time ${END_TIME} \ --period 60 \ --statistics Average \ --dimension Name=InstanceId,Value=${instance_id} \ --query Datapoints[].Average \ --output text)) for s in ${STATUS[*]}; do if [ $s != "0.0" ]; then echo $instance_id break fi done done
スクリプト実行結果
スクリプトの実行結果を確認するため、2つのインスタンスのステータスを失敗にしています。 インスタンスID i-fba50d0e、i-a56dca50 がステータスチェックに失敗していることがわかります。
スクリプトを実行します。
$ ./status-check-failed-list.sh 2015-07-06T22:00:00 2015-07-07T22:00:00 i-fba50d0e i-a56dca50 $
ステータスチェックが失敗しているインスタンスIDのみ出力されました!
なお、引数に開始時間、終了時間を指定しないとエラーになります。
$ ./status-check-failed-list.sh Usage: status-check-failed-list.sh start-time end-time $
まとめ
ステータスチェックが失敗しているインスタンスIDの一覧を取得する方法のご紹介でした。